﻿/**

 * Copyright (c) 2015-2017, FastDev 刘强 (fastdev@163.com).

 *

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at

 *

 *      http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */

using Mono.Cecil;
using Mono.Cecil.Cil;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using OF.ILModifier.Common;
using OF.ILModifier.Entity;

namespace OF.ILModifier.Extension
{
    public static class VariableDefinitionExtension
    {
        /*
        private static FieldInfo indexField;
        static VariableDefinitionExtension()
        {
            indexField = typeof(VariableDefinition).GetField("index", BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
        }
        */
        public static VariableDefinition Clone(this VariableDefinition thisObj, ModuleDefinition module, MethodReference provider)
        {
            var varType = module.ImportReference(thisObj.VariableType, module.ImportReference(provider));
            VariableDefinition result = new VariableDefinition(varType);
            result.VariableType = varType;
            FieldHelper.Copy(new FieldKey { DeclaringType = typeof(VariableDefinition), FieldName = "index" }, thisObj, result);
            /*
            var indexValue = indexField.GetValue(thisObj);
            indexField.SetValue(result, indexValue);
            */
            return result;
        }

        /*
                 VariableType = varType,
                 index = this.index
         */
    }
}
